﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business;
using Foundation;

namespace RPGSoundmixer.SoundSuiteConfiguration {
    /// <summary>
    /// Der Interaktionsteil des EffektGroupCreate Views
    /// </summary>
    public partial class EffektGroupCreateView : Form, IEffektGroupCreateView {
        private EffektGroupCreatePresenter presenter;

        /// <summary>
        /// Der angezeigte Gruppennamen
        /// </summary>
        public string GroupName {
            get {
                return this.txtName.Text;
            }
            set {
                this.txtName.Text = value;
            }
        }

        /// <summary>
        /// Der angezeigte Key zur Gruppe
        /// </summary>
        public char GroupKey {
            get {
                return this.cmbKey.Text.ToCharArray()[0];
            }
            set {
                this.cmbKey.SelectedItem = this.cmbKey.Items[this.cmbKey.FindString(value.ToString())];
            }
        }
        
        /// <summary>
        /// Konstruktor
        /// füllt die Elemente der Key Combobox ab und initialisiert den Presenter
        /// </summary>
        /// <param name="freeKeys"></param>
        public EffektGroupCreateView(List<string> freeKeys) {
            InitializeComponent();
            if (!this.DesignMode) {
                this.cmbKey.Items.AddRange(freeKeys.ToArray());
                this.presenter = new EffektGroupCreatePresenter(this);
            }
        }

        
        /// <summary>
        /// Handler für den OK Button. überprüft die Eingaben und Erstellt eine neue Effekt Group
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btOK_Click(object sender, EventArgs e) {             
            string msg = CheckViewValues();
            if (msg == null) {
                this.presenter.AddEffektGroupToCurrentSoundSuite();
                this.Close();
            }
            else {
                MessageBox.Show(msg, "Fehlende Eingaben", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        /// <summary>
        /// Überprüft die eingegebenen Werte in der View
        /// </summary>
        /// <returns>Eine Nachricht, wenn ein Fehler entdeckt wurde, null, wenn kein Fehler vorhanden ist </returns>
        private string CheckViewValues() {
            string msg = null;
            if (this.cmbKey.SelectedItem == null) {
                msg = "Es wurde kein Key ausgewählt";
            }
            else if (string.IsNullOrEmpty(this.txtName.Text)) {
                msg = "Es wurde kein Name für die Gruppe angegeben";
            }
            return msg;
        }

        /// <summary>
        /// Handler für den Abbrechen Button. Dieser schliesst das Fenster
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btCancel_Click(object sender, EventArgs e) {
            this.Close(); 
        }
    }
}
